﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Sinacor.Infra.UI.Common;
using Sinacor.Infra.UI.Security.Services;
using Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Movimento.ControleMovimentoOrdens;
using Sinacor.UI.Bovespa.Ordens.Communication.Translator;
using Sinacor.UI.Bovespa.Ordens.Model;

namespace Sinacor.UI.Bovespa.Ordens.Communication
{
    public class ControleMovimentoOrdens : BaseCommunication
    {
        #region Construtor

        /// <summary>
        /// Construtor padrão
        /// </summary>
        /// <param name="session"></param>
        public ControleMovimentoOrdens(SessionInformation session) : base(session) { }

        #endregion

        #region Métodos

        /// <summary>
        /// Obtém informações sobre o movimento do módulo de Ordens Bovespa
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public Model.InformacoesMovimento ObterInformacoesMovimento(Model.DataMovimento request)
        {
            Model.InformacoesMovimento modelInformacoesMovimento = null;
            IControleMovimentoOrdens servico = null;
            try
            {
                using (ServiceInstance<IControleMovimentoOrdens> serviceManager = new ServiceInstance<IControleMovimentoOrdens>())
                {
                    Translator.ModelToDataContract.ControleMovimentoOrdens translator = new Translator.ModelToDataContract.ControleMovimentoOrdens();
                    servico = serviceManager.TryGetInstance(this.Session);

                    InformacoesMovimentoResponse response = servico.ObterInformacoesMovimento(translator.ToDataMovimentoRequest(request));

                    modelInformacoesMovimento = new Translator.DataContractToModel.ControleMovientoOrdens().ToInformacoesMovimento(response);
                }
            }
            catch (Exception ex)
            {
                HandleFault(ex);
            }

            return modelInformacoesMovimento;
        }

        #endregion


    }
}
